package com.dc.service.impl;

import com.dc.base.contants.GlobalVar;
import com.dc.base.vo.BaseModel;
import com.dc.dao.MenuDao;
import com.dc.model.Auth;
import com.dc.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class MenuServiceImpl implements MenuService {
    @Autowired
    MenuDao menuDao;

    public BaseModel selectMyMenu(Integer user_id, BaseModel baseModel) {
        //查询我拥有的二级菜单
        List<Auth> menu_2=menuDao.selectMyMenu(user_id);
        //查询所有的菜单
        List<Auth>  menuAll=menuDao.selectAllMenu();
        //取出所有二级菜单的父级id，如果说二级菜单的父级id==1级菜单的id，
        // 那么这个1级菜单我就拥有,还要去重复
        Map<Integer,Auth> menu_1=new HashMap<Integer, Auth>();
            for(Auth menu:menu_2){
                for (Auth AllMenu: menuAll){
                    if(menu.getParent_level()==AllMenu.getAuth_id()){
                        if(menu_1.get(AllMenu.getAuth_id())==null){
                            //说明这个菜单之前没有存进去过，可以存
                            menu_1.put(AllMenu.getAuth_id(),AllMenu);
                        }
                    }
                }
            }
            List<Auth> newMenu_1=new ArrayList<Auth>();
            for(Auth menu:menu_1.values()){
                newMenu_1.add(menu);
            }
        //将得到的数据封装到map中传递出去
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("menu_1",newMenu_1);
        map.put("menu_2",menu_2);
        baseModel.setResultCode(0);
        baseModel.setMessage("查询我的菜单信息成功！");
        baseModel.setData(map);
        return baseModel;
    }

    public List<Auth> selectAllMenu() throws Exception {
        // 查询所有的菜单
        List<Auth> menuList=menuDao.selectAllMenu();
        // 将菜单集合存入到全局变量常量类中
        GlobalVar.listMenu=menuList;
        GlobalVar.mapCodeMenu = new HashMap<String, Auth>();
        // 以键名为code的形式存入每个菜单对象
        for(Auth menu:menuList){
            GlobalVar.mapCodeMenu.put(menu.getAuth_level(),menu);
        }
        return menuList;
    }
}
